package response

import (
	"context"
	"encoding/json"
	"fmt"
	"github.com/99designs/gqlgen/graphql"
	"gql3/graph/customize/apierror"
)

// gql返回结构
type Response struct {
	// 包含响应所发生的所有错误集合
	Errors apierror.List `json:"errors,omitempty"`
	// 数据
	Data json.RawMessage `json:"data"`
	// `errors` 数组中第一个错误的消息。
	Message string `json:"message,omitempty"`
	// 错误对应的HTTP状态代码（由第一节常见的 ***HTTP 错误代码*** 定义）。
	StatusCode int `json:"statusCode"`
	// 支持oauth协议
	Error string `json:"error,omitempty"`
	// 支持oauth协议
	ErrorDescription string `json:"error_description,omitempty"`
}

func ErrorResponse(ctx context.Context, messagef string, args ...interface{}) *Response {
	return &Response{
		Errors: apierror.List{{Message: fmt.Sprintf(messagef, args...)}},
	}
}

// 把gqlgen框架的错误结构转换成自定义的错误结构
func FromGraphqlResponse(r *graphql.Response) *Response {
	if r == nil {
		return nil
	}
	resp := &Response{}
	resp.Errors = apierror.FromGraphqlErrorList(r.Errors)
	resp.Data = r.Data
	return resp
}
